//
//  ViewController.m
//  QQ聊天
//
//  Created by 宋 on 16/3/11.
//  Copyright © 2016年 宋. All rights reserved.
//

#import "ViewController.h"
#import "XXmessages.h"
#import "XXmessagefram.h"
#import "XXMessageCell.h"
#import <UIKit/UIKit.h>

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@property (weak, nonatomic) IBOutlet UITextField *textInput;
//需要一个frame模型对象来保存消息
@property(nonatomic,strong)NSMutableArray *array;

@end

@implementation ViewController
//懒加载数据，重写array的get方法
-(NSMutableArray *)array{
    if (_array == nil) {
        //1.读取plist文件
        NSString *path = [[NSBundle mainBundle]pathForResource:@"messages.plist" ofType:nil];
        NSArray *arryDict = [NSArray arrayWithContentsOfFile:path];
        //2.字典转化模型
        NSMutableArray *arrayModels = [NSMutableArray array];
        for (NSDictionary *dict in arryDict) {
            XXmessages  *model = [XXmessages messagesWithDcit:dict];
            //创建一个frame模型
            XXmessagefram *modelframe = [[XXmessagefram alloc] init];
            modelframe.message = model;
            //把frame模型加入到数组
            [arrayModels addObject:modelframe];
        }
        _array = arrayModels;
    }
    return _array;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.dataSource = self;
    //隐藏滚动条
    self.tableView.showsVerticalScrollIndicator = NO;

    //设置背景颜色
    self.tableView.backgroundColor = [UIColor colorWithRed:226/255.0 green:226/255.0 blue:226/255.0 alpha:1.0];
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    //处理键盘弹出事件，不需要管理通知的发布者
    //通知的监听
    //1.创建一个NSNotificationCenter对象来监听
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    //2.监听消息弹出事件
    [center addObserver:self selector:@selector(keyboardUp:) name:UIKeyboardWillChangeFrameNotification object:nil];
    
}

//通知键盘弹出事件的执行
-(void)keyboardUp:(NSNotification *)notoInfo
{
//    NSLog(@"键盘，去吧");
//    NSLog(@"%@",userInfo);
    //获取键盘的y值
    CGRect rectEnd = [notoInfo.userInfo [UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat keyboardY = rectEnd.origin.y;
    //计算聊天记录和输入框的平移高度
    CGFloat upValue = keyboardY - self.view.frame.size.height;
    //实现平移
    //以一个0.25秒的动画效果平移("^{回调函数}")
    [UIView animateWithDuration:0.3 animations:^{
    self.view.transform = CGAffineTransformMakeTranslation(0, upValue);
    }];
    
    //获取最后一行的IndexPath
    NSIndexPath * lasIndexPath = [NSIndexPath indexPathForRow:self.array.count - 1 inSection:0];
    
    //将最后一行显示在键盘上面
    [self.tableView scrollToRowAtIndexPath:lasIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
//移除通知
-(void)dealloc{
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}
//*******TextField代理方法的实现********
//-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
//    return NO;
//}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    //    1.获取文本框的输入内容
    NSString *intext = textField.text;
    [self sendMessage:XXmessagesTypeMe withText:intext];
    //自动回复
    [self sendMessage:XXmessagesTypeOther withText:@"你好！"];
    //清空输入行
    textField.text = nil;
    return YES;
}
//封装发送消息的方法
-(void)sendMessage:(XXmessagesType)type withText:(NSString *)intext{
    //    2.创建一个数据模型
    XXmessages *model = [[XXmessages alloc] init];
    //设置模型的正文
    model.text = intext;
    //设置模型的时间，获取系统当前时间
    NSDate * nowDate = [NSDate date];
    //时间格式化（今天10：32）
    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    //设置时间格式
    formatter.dateFormat = @"今天 HH:mm";
    //设置数据模型的时间
    model.time = [formatter stringFromDate:nowDate];
    model.type = type;
    
    //    3.创建一个frame模型
    XXmessagefram *modelframe = [[XXmessagefram alloc] init];
    modelframe.message = model;
    //    4.将建好的frame模型对象添加到模型数组中
    [self.array addObject:modelframe];
    //    5.刷新uitableview数据
    [self.tableView reloadData];
    //    6.把最后一行滚动到最上面
    //获取最后一行的IndexPath
    NSIndexPath * lasIndexPath = [NSIndexPath indexPathForRow:self.array.count - 1 inSection:0];
    //将最后一行显示在键盘上面
    [self.tableView scrollToRowAtIndexPath:lasIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

}

//*******TableView代理方法的实现********
//TableView将滚动时候方法
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    [self.view endEditing:YES];
}



//*******TableView数据源方法的实现********
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
//    return self.array.count ;
    NSInteger i = self.array.count;
    return i;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //1.设置数据模型
    XXmessagefram * modelFrame = self.array[indexPath.row];
    //2.创建cell
//    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    
    XXMessageCell *cell = [[XXMessageCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    
//    static NSString *ID = @"message_cell";
//    XXMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//    if (cell == nil) {
//        cell = [[XXMessageCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
//    }
    //3.将数据模型设置给cell
    //cell.textLabel.text = @"dddd";
    cell.messagefram = modelFrame;
    return cell;
    
}

//返回行高方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath{
    XXmessagefram *messageFrame = self.array[indexPath.row];
    CGFloat height = messageFrame.rowHeight;
    return height;
}



@end
